// src/services/todoService.js
/**
 * 待办事项服务模块
 * 该模块封装了与后端 API 交互的所有方法
 * 使用 axios 进行 HTTP 请求
 */

// 导入 axios HTTP 客户端库
import axios from 'axios';

// 后端 API 的基础 URL
// 注意：在实际生产环境中，这个 URL 应该根据环境配置来设置
const API_URL = 'http://localhost:8080/api/todos';

/**
 * 获取所有待办事项
 * @returns {Promise<Array>} 返回待办事项数组
 * @throws {Error} 如果请求失败会抛出错误
 */
export const getAllTodos = async () => {
  const response = await axios.get(API_URL);
  return response.data;
};

/**
 * 创建新的待办事项
 * @param {Object} todo - 待办事项对象
 * @param {string} todo.title - 待办事项的标题
 * @param {boolean} todo.completed - 待办事项的完成状态
 * @returns {Promise<Object>} 返回创建成功的待办事项对象
 * @throws {Error} 如果请求失败会抛出错误
 */
export const createTodo = async (todo) => {
  const response = await axios.post(API_URL, todo);
  return response.data;
};

/**
 * 更新待办事项
 * @param {number|string} id - 待办事项的唯一标识
 * @param {Object} updatedTodo - 更新后的待办事项对象
 * @param {string} updatedTodo.title - 更新后的标题
 * @param {boolean} updatedTodo.completed - 更新后的完成状态
 * @returns {Promise<Object>} 返回更新后的待办事项对象
 * @throws {Error} 如果请求失败会抛出错误
 */
export const updateTodo = async (id, updatedTodo) => {
  const response = await axios.put(`${API_URL}/${id}`, updatedTodo);
  return response.data;
};

/**
 * 删除待办事项
 * @param {number|string} id - 待办事项的唯一标识
 * @returns {Promise<void>} 删除成功时 resolve
 * @throws {Error} 如果请求失败会抛出错误
 */
export const deleteTodo = async (id) => {
  await axios.delete(`${API_URL}/${id}`);
};